#!/bin/bash

# 调用示例:
# sh search_service.sh 命名空间名称

namespace_name=$1
objsvcnum=13
nacosurl='http://nacos.test.xxxx.cn/nacos'



# 检测 namespace_id 是否正确
curl -s --request GET --url "$nacosurl/v2/console/namespace/list" -o /tmp/ns.txt
grep -c "\"${namespace_name}\"" /tmp/ns.txt
if [ $? -ne 0 ];then
    echo "ERR: 请检查 ${namespace_name} 是否正确"
    exit 1
fi
namespace_id=$(sed 's#,{#\n#g' /tmp/ns.txt | awk -F'"' '/'\"${namespace_name}\"'/{print $4}')



# 查询命名空间下服务实例个数
curl -s --request GET --url "$nacosurl/v2/ns/service/list?pageNo=1&pageSize=50&username=xxxx&password=xxxxx&namespaceId=${namespace_id}" -o /tmp/svc.txt
livesvcnum=$(sed 's#,#\n#g' /tmp/svc.txt | awk -F':' '/"count":/{print $NF}')
if [ $livesvcnum -lt "$objsvcnum" ];then
    echo "ERR: 共 $objsvcnum 个服务, ${namespace_name} 命名空间内只启动了 $livesvcnum 个服务"
    exit 1
fi



# 查询服务实例详情
svc_list=($(sed 's#"# #g;s#,# #g;s#\[#\n#;s#\]#\n#' /tmp/svc.txt |  sed -n '2p'))
for svc_name in ${svc_list[@]};do
    result=$(curl -s --request GET --url "$nacosurl/v2/ns/catalog/instances?pageNo=1&pageSize=50&username=xxx&password=xxxx&clusterName=DEFAULT&namespaceId=${namespace_id}&serviceName=${svc_name}")
    # 返回结果中，注册的服务是否是网段192.168.7.x
    echo "$result" | grep '192.168.7.'
    if [ $? -ne 0 ];then
        echo "ERR: 192.168.7.x 网段未找到 ${service_ame} 服务"
        exit 1
    fi

    # 返回结果中，注册的服务是否包含非法网段172.172.
    echo "$result" | grep -E '172.172.'
    if [ $? -eq 0 ];then
        echo "ERR: 非法网段服务注册到nacos中, 详情登录查看: http://nacos.test.xxxx.cn/nacos"
        exit 1
    fi

    echo "INFO: ${service_ame} 存活"
done

